package sf.database.meta;

import sf.tools.reflect.PropertyHold;

public interface IColumnMapping {
    /**
     * 得到数据库中的列定义
     * @return ColumnType
     */
//    ColumnType get();

    /**
     * 该字段是否为LOB字段
     * @return true if the column is lob.
     */
    boolean isLob();

    /**
     * 是否为自动生成数值
     * @return
     */
    boolean isGenerated();

    /**
     * 该字段不参与插入
     * @return
     */
    boolean isNotInsert();

    /**
     * 该字段不参与更新
     * @return
     */
    boolean isNotUpdate();

    /**
     * 得到java类型
     *
     * @return java字段类型
     */
//    Class<?> getFieldType();

    /**
     * java字段名
     *
     * @return java字段名
     */
//    String fieldName();

    /**
     * 原生的列名
     * @return
     */
//    String rawColumnName();

    /**
     * 数据库列名，小写，不转义
     *
     * @return 数据库列名
     */
//    String lowerColumnName();

    /**
     * 数据库列名，大写，不转义
     * @return
     */
//    String upperColumnName();

    /**
     * get tableMetadata
     * @return 该列所属的表的的模型
     */
    TableMapping getMeta();

    /**
     * Is the column a promary key of table.
     * @return true is is promary key.
     */
    boolean isPk();

    /**
     * 设置，是否为主键
     * @param pk
     */
    void setPk(boolean pk);

    /**
     * 获得字段访问器
     * @return
     */
    PropertyHold getFieldAccessor();
}
